package allwe.testProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 我的调用处理器 - 设定增强规则
 */
public class MyInvocationHandler implements InvocationHandler {

    private final Dinner dinner;

    public MyInvocationHandler(Dinner dinner) {
        this.dinner = dinner;
    }

    /**
     * 定义增强规则
     *
     * Object proxy     代理对象
     * Method method    被代理的方法
     * Object[] args    被代理方法运行时的实参
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        if (method.getName().equals("eat")) {
            System.out.println("前置增强===================饭前洗手");
            // 运行eat方法
            method.invoke(dinner, args);
            System.out.println("后置增强===================饭后洗碗");
        } else if (method.getName().equals("drink")) {
            System.out.println("前置增强===================打开瓶盖");
            // 运行eat方法
            method.invoke(dinner, args);
            System.out.println("后置增强===================关上瓶盖");
        } else {
            return method.invoke(dinner, args);
        }
        return null;
    }
}
